package cn.liontalk.BridgePattern;

/**
 * 因为它将打开软件的具体实现放到了软件实现里面，而不是放在了手机，
 * 通过聚合方式去调用软件打开的方法，这就像一条桥一样连接手机和软件。
 *
 * 桥接模式利用了聚合的优点去解决继承的缺点，使得抽象和实现进行分离解耦。
 * 正由于解耦，使得有更好的扩展性，加手机类型或者加软件都非常容易，也不会破坏原有的代码。
 */
public class BridgeTest {

    public static void main(String[] args) {
        Software chrome = new Chrome();
        Software firefox = new FireFox();

        Phone androidPhone = new AndroidPhone(chrome);
        androidPhone.openSoftware();

        androidPhone.setSoftware(firefox);
        androidPhone.openSoftware();

        Phone iosPhone = new IOSPhone(chrome);
        iosPhone.openSoftware();

        iosPhone.setSoftware(firefox);
        iosPhone.openSoftware();
    }
}
